package br.com.acs.CameraIP.controller;

import br.com.acs.CameraIP.dao.PerfilDao;
import br.com.acs.CameraIP.dao.PerfilDaoImp;
import br.com.acs.CameraIP.model.Perfil;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

@ManagedBean
@SessionScoped
public class PerfilController implements Serializable{
	private static final long serialVersionUID = 1L;
	private Perfil perfil  = new Perfil();  
    private DataModel<Perfil> listaPerfils;
    LoginController login = new LoginController();
    private long idEmpresa = login.PegarClienteLogado();
    
    public DataModel<Perfil> getListarPerfilsTodos() {
        List<Perfil> lista = new PerfilDaoImp().listTodos();
        listaPerfils = new ListDataModel<Perfil>(lista);
        return listaPerfils;
    }
                               //listarPerfilsAtivos
    public DataModel<Perfil> getListarPerfilsAtivos() {
        List<Perfil> lista = new PerfilDaoImp().listAtivos();
        listaPerfils = new ListDataModel<Perfil>(lista);
        return listaPerfils;
    }
 
    public Perfil getPerfil() {
        return perfil;
    }

    public void setPerfil(Perfil perfil) {
        this.perfil = perfil;
    }

    public void prepararAdicionarPerfil(ActionEvent actionEvent){
    	perfil = new Perfil();
    }

    public void prepararAlterarPerfil(ActionEvent actionEvent){
    	perfil = (Perfil)(listaPerfils.getRowData());
      }
    
    public String excluirPerfil(ActionEvent actionEvent){
    	PerfilDao dao = new PerfilDaoImp();
    	dao.remove(perfil);
        return "lstUsuarios";
    }

    public void adicionarPerfil(ActionEvent actionEvent){
    	PerfilDao dao = new PerfilDaoImp();
    	perfil.setIdCliente(idEmpresa);
        dao.save(perfil);
    }

    public void alterarPerfil(ActionEvent actionEvent){
    	PerfilDao dao = new PerfilDaoImp();
        dao.update(perfil);
   }
    
	public void salvaPerfil() {
		PerfilDao dao = new PerfilDaoImp();
		try {
			perfil.setIdCliente(idEmpresa);
			dao.save(perfil);	
			FacesContext.getCurrentInstance().addMessage(null,new FacesMessage(FacesMessage.SEVERITY_INFO,"Registro salvo", "Mensagem"));
		} catch (Exception ex) {
			ex.printStackTrace();
			FacesContext.getCurrentInstance().addMessage(null,new FacesMessage(FacesMessage.SEVERITY_ERROR,"Erro, ao salvar registro", "Mensagem"));
		} finally {
			perfil = new Perfil();
		}
	}

	public DataModel<Perfil> getListaPerfils() {
		return listaPerfils;
	}

	public void setListaPerfils(DataModel<Perfil> listaPerfils) {
		this.listaPerfils = listaPerfils;
	}

    public void selectPerfil(ActionEvent actionEvent){
    	Map<String, Object> contexto = FacesContext.getCurrentInstance().getExternalContext().getRequestMap();
    	perfil = (Perfil) contexto.get("perfil");// contexto.get("perfil") onde "perfil" é o var do DataTable utilizado
    }
    public String reinit() {  
        perfil = new Perfil();
        return null;  
    } 

}
